package edu.tsinghua.oxy.engineer.service;

import java.net.MalformedURLException;
import java.util.List;
import java.util.Map;

/**
 * Url调度器
 *
 * @author sean
 * @date 2021 - 07 - 29 下午3:50
 */
public interface IUrlService {


    /**
     * 获取url的方法
     * 从仓库中获取url（优先获取高优先级的url，如果没有，再获取低优先级的url）
     * @return
     */
    Map<String,String> poll();

    /**
     * 向高优先级列表中添加列表url
     * @param highUrl
     * @throws MalformedURLException
     */
    void offerHigher(String highUrl) throws MalformedURLException;

    /**
     * 向高优先级列表中添加列表url
     * @param domain
     * @param highUrl
     */
    void offerHigher(String domain, String highUrl);

    /**
     * 向高优先级列表中添加处理失败的列表url
     * @param domain
     * @param highUrl
     */
    void offerErrorHigher(String domain, String highUrl);

    /**
     * 向低优先级列表中添加详情url
     * @param lowUrl
     * @throws MalformedURLException
     */
    void offerLower(String lowUrl) throws MalformedURLException;

    /**
     * 向低优先级列表中添加处理失败的详情url
     * @param domain
     * @param lowUrl
     */
    void offerErrorLower(String domain, String lowUrl);

    /**
     * 批量写入低优先级队列详情url
     * @param domain
     * @param lowUrls
     */
    void offerLower(String domain, List<String> lowUrls);

    /**
     * 获取下一页的页码
     * @param domain
     * @return Long
     */
    Long getNextPage(String domain);

}
